home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 41 / Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso / -seriously_amiga- / programming / other / gtlayout / source / ltp_defaulthistoryhook.c < prev    next >
C/C++ Source or Header  |  1999-04-19  |  1KB  |  56 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1998 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=4
  8. */
  9.  
  10. #ifndef _GTLAYOUT_GLOBAL_H
  11. #include "gtlayout_global.h"
  12. #endif
  13.  
  14. #include "Assert.h"
  15.  
  16. ULONG SAVE_DS ASM
  17. LTP_DefaultHistoryHook(REG(a0) struct Hook *Hook,REG(a1) STRPTR NewString,REG(a2) struct Gadget *Gadget)
  18. {
  19.     ObjectNode            *Node    = (ObjectNode *)Gadget->UserData;
  20.     struct LayoutHandle    *Handle = Node->Special.String.LayoutHandle;
  21.     struct MinList        *List    = (struct MinList *)Hook->h_Data;
  22.  
  23.     if(NewString)
  24.     {
  25.         ULONG *Data;
  26.  
  27.         if(Data = (ULONG *)LTP_Alloc(Handle,sizeof(ULONG) + sizeof(struct Node) + strlen(NewString) + 1))
  28.         {
  29.             struct Node *NewNode;
  30.  
  31.             *Data++ = sizeof(ULONG) + sizeof(struct Node) + strlen(NewString) + 1;
  32.  
  33.             NewNode = (struct Node *)Data;
  34.  
  35.             NewNode->ln_Name = (STRPTR)(NewNode + 1);
  36.  
  37.             strcpy(NewNode->ln_Name,NewString);
  38.  
  39.             AddTail((struct List *)List,NewNode);
  40.         }
  41.         else
  42.             return(FALSE);
  43.     }
  44.     else
  45.     {
  46.         if(List->mlh_Head->mln_Succ)
  47.         {
  48.             ULONG *Data = (ULONG *)RemHead((struct List *)List);
  49.  
  50.             LTP_Free(Handle,&Data[-1],Data[-1]);
  51.         }
  52.     }
  53.  
  54.     return(TRUE);
  55. }
  56.